/*******************************************************************************
 * Copyright (c) 2011, 2016 Eurotech and/or its affiliates
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Eurotech
 *******************************************************************************/
package org.eclipse.kura.net.admin.modem;

import java.util.Hashtable;

import org.eclipse.kura.net.modem.CellularModem;
import org.eclipse.kura.net.modem.ModemDevice;
import org.eclipse.kura.net.modem.ModemTechnologyType;

public interface CellularModemFactory {

    /**
     * Obtains generic modem service
     *
     * @param modemDevice
     *            - modem device as <code>ModemDevice</code>
     * @param platform
     *            - hardware platform as {@link String}
     * @return generic modem service as <code>CellularModemService</code>
     * @throws Exception
     */
    public CellularModem obtainCellularModemService(ModemDevice modemDevice, String platform) throws Exception;

    /**
     * Reports modem services available
     *
     * @return list of modem services as <code>Hashtable<String, CellularModemService></code>
     *         with the usb port as the key
     */
    public Hashtable<String, ? extends CellularModem> getModemServices();

    /**
     * Releases modem service specified by its USB address
     *
     * @param usbPortAddress
     */
    public void releaseModemService(String usbPortAddress);

    /**
     * Reports type of modem service
     *
     * @return type of modem service as <code>ModemTechnologyType</code>
     */
    @Deprecated
    public ModemTechnologyType getType();
}
